#pragma region  【算法7 - 8】筛选算法 
void HeapAdjust(datetype R[], int s, int t)
{                //在R[s]… R[t]中，以R[s]为根的子树只有R[s]与其左右孩子之间可能不满足堆特性
                 //进行调整使以R[s]为根的子树成为大顶堆
    datetype rc; //缓冲变量
    rc = R[s] ；i = s;
    for (j = 2 * i; j <= t; j = 2 * j) //沿关键码较大的孩子结点向下筛选
    {
        if (j < t && R[j].key < R[j + 1].key)
            j = j + 1; // j指向R[i]的关键码较大的孩子
        if (rc.key > R[j].key)
            break; //不用调到叶子就到位了
        R[i] = R[j];
        i = j; //准备继续向下调整
    }
    R[i] = rc； //插入
}
#pragma endregion
#pragma region 【算法7 - 9】堆排序算法 
void HeapSort(datetype R[], int n)
{ //将序列R[1]..R[n]按堆排序方法进行排序
    for (i = n / 2; i > 0; i--)
        HeapAdjust(R, i, n); //将序列R[1]..R[n]建成初始堆
    for (i = n; i > 1; i--)
    {
        R[0] = R[1]; // 堆顶R[1]与堆底元素R[i]交换
        R[1] = R[i];
        R[i] = R[0];
        HeapAdjust(R, 1, i - 1); //将R[1]..R[i-1]重新调整为堆
    }
}
#pragma endregion